动态格式

计算组中格式表达式中可以设置度量的显示格式,这里要注意,动态格式表达式目前只适用于值类型的度量,文本类型是不支持的,比如最近很多人在表格中应用了svg,在图表中是正常显示成图表的,但在工具提示中就会显示长长的svg代码,可读性极差,目前只能通过添加图层或者指定工具提示页来解决,是无法修改svg度量的动态格式的,因为它是文本类型。

继续回到动态格式,在以前的文章中曾分享过怎么实现动态格式,比如当值大于亿时显示单位为亿,大于万时显示为万,就像下面这样

VAR Cur =
    SELECTEDMEASURE ()
RETURN
    SWITCH (
        True(),
        Cur >= 1E8, """" & FORMAT ( Cur / 1E8, "#,0.00 亿" ),
        Cur >= 1E4, """" & FORMAT ( Cur / 1E4, "#,0.00 万" ),
        Cur >= 1E0, "#,0",
        "#,0.00%"
    )

这段代码在值大于0的时候表现良好,但是当值存在负值时呢?首先想到的是用绝对值,会如我所愿吗?

VAR Cur =
    SELECTEDMEASURE ()
var AbsCur = abs( Cur )
RETURN
    SWITCH (
        True(),
        AbsCur >= 1E8, """" & FORMAT ( Cur / 1E8, "#,0.00 亿" ),
        AbsCur >= 1E4, """" & FORMAT ( Cur / 1E4, "#,0.00 万" ),
        AbsCur >= 1E0, "#,0",
        "#,0.00%"
    )

负值的部分出现了两个负号,那就问下gpt4,因为当值是负值时,本身会带一个负号,然后FORMAT函数又加了一个负号,就变成了两个负号。

明白了原因,处理起来就简单了,只需要保留自带的负号,Format格式化的时候全用绝对值就可以了。

VAR Cur =
    SELECTEDMEASURE ()
var AbsCur = abs( Cur )
var result = 
    SWITCH (
        True(),
        AbsCur >= 1E8, """" & FORMAT ( AbsCur / 1E8, "#,0.00 亿" ),
        AbsCur >= 1E4, """" & FORMAT ( AbsCur / 1E4, "#,0.00 万" ),
        AbsCur >= 1E0, "#,0",
        "#,0"
    )
 return result

如果想单独设置负值时的格式呢?回到微软官方文档,发现FORMAT的自定义格式部分其实是有三部分呢,只是通常正值和负值的格式一样,所以就没用过后面的部分。。。

所以,也可以改为下面这样

VAR Cur =
    SELECTEDMEASURE ()
var AbsCur = ABS( Cur )
RETURN
    SWITCH (
        True(),
        AbsCur >= 1E8, """" & FORMAT ( Cur / 1E8, "#,0.00 亿;#,0.00 亿 " ),
        AbsCur >= 1E4, """" & FORMAT ( Cur / 1E4, "#,0.00 万;#,0.00 万" ),
        AbsCur >= 1E0, "#,0",
        "#,0.00%"
    )

这里还要注意的是如果我们不使用FORMAT来格式化度量的话,效果上会有差异的,比如下面这样,就去掉了度量所带的负号,用括号来替代了。两种方法结合就可以更自由地组合度量值的动态格式了。